package cz.fimuni.pa165.backendderby.services;

import cz.fimuni.pa165.backendapi.dto.RequestDTO;
import cz.fimuni.pa165.backendderby.entities.Car;
import java.util.List;

/**
 *
 * @author Ondřej Myška
 */
public interface CarService {

    /**
     *
     * Uloží do databáze objekt typu Car
     *
     * @param car objekt typu Car, který se má vytvořit
     */
    public void createCar(Car car);

    /**
     * Smaže object Car z databáze
     *
     * @param car objekt typu Car určený k odstranění z databáze
     */
    public void deleteCar(Car car);

    /**
     * Vyhledá auto zadané parametrem metody
     *
     * @param car Auto, které se má vyhledat v databázi
     * @return Car, pokud se auto v DB nachází, jinak null
     */
    public List<Car> getCar(Car car);

    /**
     * Aktualizuje záznam o autě
     *
     * @param car Instance Car, která má být aktualizována
     * @return true, pokud se aktualizace provedla, jinak false
     */
    public boolean updateCar(Car car);

    /**
     * Vrátí všechny auta v systému
     *
     * @return List<Car>, pokud jsou v systému auta, jinak null
     */
    public List<Car> getAllCars();

    /**
     * Vyhľadá auto podľa id a údaje vráti v objekte CarDTO.
     * @param id Id hľadaného auta.
     * @return objekt typu CarDTO. Null, ak auto neexistuje.
     */
    public Car find(Long id);
    
    /**
     * Metóda, ktorá na základe zadaných požiadaviek vráti zoznam áut
     * vyhovujúcich týmto požiadavkám.
     *
     * @param request požiadavky užívateľa na auto ako objekt typu RequestDTO
     * @return zoznam áut, ktoré vyhovujú požiadavkám, ak žiadne auto
     * nevyhovuje, vráti null
     */
    public List<Car> processRequest(RequestDTO request);
}
